from app.extensions import db
from app.persistence.HouseInfo import HouseInfo



class Facility(db.Model):
    __tablename__ = 'facilities'

    #主键：同时也是关联到HouseInfo的外键
    houseid=db.Column(
        db.Integer,
        db.ForeignKey('houseinfo.houseid',ondelete='RESTRICT',onupdate='RESTRICT'),#删除时受限
        primary_key=True,
        nullable=False,
        info={'verbose_name':'关联房源ID'} #显示名称
    )

    #定义一对一关系
    house=db.relationship(
        'HouseInfo',
        backref=db.backref('facilities', uselist=False),#反向引用，设置为非列表形式
        foreign_keys=[houseid]  #指定外键字段
    )

    #布尔类型设施字段（均可为空）
    has_lift = db.Column(
        db.Boolean,
        nullable=True,  #允许空值
        info={'verbose_name':'有无电梯'}  #显示名称
    )

    has_parking = db.Column(
        db.Boolean,
        nullable=True,  #允许空值
        info={'verbose_name':'有无停车位'}  #显示名称
    )

    has_wifi = db.Column(
        db.Boolean,
        nullable=True,  #允许空值
        info={'verbose_name':'有无WIFI'}  #显示名称
    )

    has_kitchen = db.Column(
        db.Boolean,
        nullable=True,  # 允许空值
        info={'verbose_name': '有无厨房'}  # 显示名称
    )

    has_washer = db.Column(
        db.Boolean,
        nullable=True,  # 允许空值
        info={'verbose_name': '有无洗衣机'}  # 显示名称
    )

    has_ac = db.Column(
        db.Boolean,
        nullable=True,  # 允许空值
        info={'verbose_name': '有无空调'}  # 显示名称
    )

    has_heating = db.Column(
        db.Boolean,
        nullable=True,  # 允许空值
        info={'verbose_name': '有无暖气'}  # 显示名称
    )

    has_tv = db.Column(
        db.Boolean,
        nullable=True,  # 允许空值
        info={'verbose_name': '有无电视'}  # 显示名称
    )

    #对象的机器可读表示
    def __repr__(self):
        return f"<Facility for house {self.houseid}>"
    #对象的可读字符串表示（用于管理员界面）
    def __str__(self):
        return f"{self.houseid}的设施信息"

    # 在 Facility 模型类中添加
    def to_dict(self):
        return {
            'has_lift': self.has_lift,
            'has_parking': self.has_parking,
            'has_wifi': self.has_wifi,
            'has_kitchen': self.has_kitchen,
            'has_washer': self.has_washer,
            'has_ac': self.has_ac,
            'has_heating': self.has_heating,
            'has_tv': self.has_tv
        }

    @classmethod
    def updatable_fields(cls):
        return [
            'has_lift', 'has_parking', 'has_wifi', 'has_kitchen',
            'has_washer', 'has_ac', 'has_heating', 'has_tv'
        ]